package first.niuke.huawei.mediumDifficulty;

import java.util.HashMap;

/**
 * @ClassName HJ36
 * @description:
 * @author: 荣燊
 * @create: 2021-07-08 10:38
 **/
public class HJ36 {
    // 字符串加密

    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        while (scanner.hasNext()) {
            String key = "TRAILBLAZERS";
            String value = "Attack AT DAWN";

            HashMap<Integer, Character> keymap = new HashMap<>();
            HashMap<Character, Character> map = new HashMap<>();

            // keymap去除重复字母
            char[] chars = key.toCharArray();
            int k = 0;
            for (int i=0; i<chars.length; i++) {
                if (keymap.containsValue(chars[i])) {
                    k++;
                } else {
                    keymap.put(i-k, chars[i]);
                }
            }
            System.out.println(keymap);

            // map中保存密码对应表
            for (int i=0; i<keymap.size(); i++) {
                map.put((char)(i+65), keymap.get(i));
            }
            System.out.println(map);

            // 还有一些没有保存到map中的
            int s = 65;
            for (int j=keymap.size(); j<26; j++) {
                while (map.containsValue((char)s)) {
                    s++;
                }
                map.put((char)(j+65), (char)s);
            }
            System.out.println(map);

            // 开始加密字符串value
            char[] valueChars = value.toCharArray();
            for (int i=0; i<valueChars.length; i++) {
                if (valueChars[i] >= 'A' && valueChars[i] <= 'Z') {
                    System.out.print(map.get(valueChars[i]));
                } else if (valueChars[i] >= 'a' && valueChars[i] <= 'z') {
                    // 先转化为大写，再转化为小写
                    valueChars[i] = (char)(valueChars[i]-32);
                    System.out.print((char)(map.get(valueChars[i])+32));
                } else {
                    System.out.print(valueChars[i]);
                }
            }
        }
//    }

//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        while (scanner.hasNext()) {
//            String key = scanner.nextLine();
//            String value = scanner.nextLine();
//
//            HashMap<Integer, Character> keymap = new HashMap<>();
//            HashMap<Character, Character> map = new HashMap<>();
//
//            // keymap去除重复字母,并全部转化为大写字母
//            char[] chars = key.toCharArray();
//            int k = 0;
//            for (int i=0; i<chars.length; i++) {
//                char c = chars[i];
//                if (c >= 'a' && c <= 'z') {
//                    c = (char)(c-32);
//                }
//
//                if (keymap.containsValue(c)) {
//                    k++;
//                } else {
//                    keymap.put(i-k, c);
//                }
//            }
//
//            // map中保存密码对应表
//            for (int i=0; i<keymap.size(); i++) {
//                map.put((char)(i+65), keymap.get(i));
//            }
//
//            // 还有一些没有保存到map中的
//            int s = 65;
//            for (int j=keymap.size(); j<26; j++) {
//                while (map.containsValue((char)s)) {
//                    s++;
//                }
//                map.put((char)(j+65), (char)s);
//            }
//
//            // 开始加密字符串value
//            char[] valueChars = value.toCharArray();
//            for (int i=0; i<valueChars.length; i++) {
//                if (valueChars[i] >= 'A' && valueChars[i] <= 'Z') {
//                    System.out.print(map.get(valueChars[i]));
//                } else if (valueChars[i] >= 'a' && valueChars[i] <= 'z') {
//                    // 先转化为大写，再转化为小写
//                    valueChars[i] = (char)(valueChars[i]-32);
//                    System.out.print((char)(map.get(valueChars[i])+32));
//                } else {
//                    System.out.print(valueChars[i]);
//                }
//            }
//            System.out.println();
//        }
//    }
}
